package BehavioralPattern.Mediator;

/**
 * @Classname : Colleague
 * @Description : 同事角色
 * @Author : chentianyu
 * @Date 2023/3/5 20:44
 */

// 抽象同事
public abstract class Colleague {

    protected Mediator mediator;

    public Colleague(Mediator mediator) {
        this.mediator = mediator;
    }

    // 自发行为 selfMethod()

    // 依赖行为（依赖中介者才可以完成） depMethod()
}


// 具体同事——采购部
class Purchase extends Colleague {

    public Purchase(Mediator mediator) {
        super(mediator);
        super.mediator.setPurchase(this);
    }


    /**
     * 依赖行为
     */
    // 采购商品
    public void purchase(Integer num) {
        super.mediator.coordinate("purchase", num);
    }

}


// 具体同事——库存部
class Stock extends Colleague {

    private Integer stockNum = 0;

    public Stock(Mediator mediator) {
        super(mediator);
        super.mediator.setStock(this);
    }


    /**
     * 自发行为
     */
    // 查询库存
    public Integer getStockNum() {
        return this.stockNum;
    }

    // 低库存
    public boolean lowStock() {
        return this.stockNum < 100;
    }

    // 高库存
    public boolean highStock() {
        return this.stockNum > 1000;
    }

    // 库存增加
    public void increase(Integer num) {
        this.stockNum += num;
        System.out.println("库存部：库存增加【" + num + "】，当前库存为【" + this.stockNum + "】");
    }

    // 库存减少
    public void decrease(Integer num) {
        this.stockNum -= num;
        System.out.println("库存部：库存减少【" + num + "】，当前库存为【" + this.stockNum + "】");
    }

}


// 具体同事——销售部
class Sale extends Colleague {

    public Sale(Mediator mediator) {
        super(mediator);
        super.mediator.setSale(this);
    }


    /**
     * 依赖行为
     */
    // 销售商品
    public void sale(Integer num) {
        super.mediator.coordinate("sale", num);
    }

}